原码,反码,补码,移码的表示范围以及数据溢出 您所在的位置:网站首页 补码 表示范围 原码,反码,补码,移码的表示范围以及数据溢出

原码,反码,补码,移码的表示范围以及数据溢出

2024-07-11 03:21| 来源: 网络整理| 查看: 265

1.表示范围:

假设二进制机器字长是n+1位,且为整数

原码表示的范围: −(2^{n}-1)≤  x  ≤2^{n}-1

反码表示的范围: −(2^{n}-1)≤  x  ≤2^{n}-1

补码表示的范围:      −2^{n}≤  x  ≤2^{n}-1

移码表示的范围:      −2^{n}≤  x  ≤2^{n}-1

移码的符号位中0表示负数,1表示正数,简单来说,原码的补码数值位不变,符号位取反就是移码。 对于8位寄存器: 原码表示范围为 -127-127,即1111 1111~0111 1111 反码表示范围为 -127-127,即1000 0000~0111 1111 补码表示范围为 -128-127,即1000 0000~0111 1111 移码表示范围为 -128-127,即0000 0000~1111 1111

2.数据溢出:

方法总结:

① 如果超过该范围的最大值,正值,那么使用该数值减去2^{n}  (n是多少bit 1字节=8bit 2字节=16bit),例如200,超过了127,则200-2^{8}=-56 在该区间内,输出-56 例如500,超过了127,则500-256=244,不在该区间,继续减去256,244-256=-12,在该区间内,输出-12 ② 如果超过该范围的最小值,负值,那么使用该数值加上2^{n} (n是多少bit 1字节=8bit 2字节=16bit),例如-200,超过了最小值,则-200+2^{8}=56 在该区间内,输出56 例如-600,超过了-127,则-600+256=-344,不在该区间,继续+256,-344+256=-88,在该区间内,输出-88

3.例题分析:

例题1(期末考试题):  若寄存器内容为00000000,若它等于-128,则为(   C ) A. 原码 B. 补码 C. 移码 D. 反码 解题: 符号位为0,所以ABD即原码、反码、补码为正数,正数的原码、反码、补码相同,转换为十进制为0; 移码的符号位中0表示负数,00000000即为-128,由于-128超出8位寄存器原码和反码的范围,所以计算-128的时候不能使用符号位不变数值位取反加一,需要特殊记。

例题2(某公司笔试题): 下列代码的运行结果(B) short i = 65537; int j = i + 1; printf(“i = % d, j = % d\n”, i, j); A i=65537,j=65538 B i=1,j=2. C i=-1,j=0 D i=1,j=65538 解题: short为16位,表示范围为(补码):−2^{15}≤  x  ≤2^{15}-1 int为32位,表示范围为(补码):−2^{31}≤  x  ≤2^{31}-1 i = 65537,超出最大表示范围,使用上述我讲的方法计算,则 65537-2^{16}=1; 根据程序自上而下执行,i = 1,  j = i + 1 = 2,所以选B。

例题3(期末考试题): 设机器数采用补码表示(含1位符号位),若寄存器内容为9BH,则对应的十进制数为(   D ) A. -97 B. -101 C. -27 D. 155 解题: 方法一:9BH转化为十进制为155,因为8位寄存器补码表示范围为 -128-127,溢出,使用上述我讲的方法计算,则155 - 2^{8} = -101; 方法二:9BH转化为二进制为10011011,补码10011011转为原码为11100101,转换为十进制为-101;



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有